package cn.kent.base.reentrantLock;

/**
 * 可重入锁
 *      概念引入
 *      synchronized内部锁是可重入锁
 *
 *  可重入锁原理：
 *      锁内部维护一个线程标识->标识目前哪个线程在使用，然后关联一个计数器，最开始计数器为0，表示该锁没有线程使用，当有线程获取，将会变成1，其他线程获取该锁会被阻塞
 *      
 */
public class Hello {

    public synchronized void helloA(){
        System.out.println("helloA");
    }
    public synchronized void helloB(){
        System.out.println("helloB");
        helloA();
    }

    public static void main(String[] args) {
        Hello hello = new Hello();
        // 调用helloB会先获取内置锁 -> 打印输出 -> 获取helloA的内置锁（如果锁不是可重入的，将会一直阻塞）
        hello.helloB();
    }
}
